package handler

import (
	"beetle/internal/biz"
	"beetle/internal/model"
	"beetle/internal/pkg/tool"
	"github.com/kataras/iris/v12"
	"strconv"
)

type dictHandler struct {
	srv biz.DictService
}

func NewDictHanler(srv biz.DictService) *dictHandler {
	return &dictHandler{srv}
}

func (h *dictHandler) Save(ctx iris.Context) {

	var dict model.Dict

	err := ctx.ReadJSON(&dict)

	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}

	err = h.srv.Save(&dict)

	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}

	ctx.JSON(tool.Success())
}

func (h *dictHandler) Update(ctx iris.Context) {

	var dict model.Dict

	err := ctx.ReadJSON(&dict)

	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}

	err = h.srv.Update(&dict)

	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}

	ctx.JSON(tool.Success())
}

func (h *dictHandler) Remove(ctx iris.Context) {

	id := ctx.Params().Get("id")

	pk, err := strconv.Atoi(id)

	if err != nil {
		if err != nil {
			ctx.JSON(tool.Fail(err.Error()))
			return
		}
	}

	err = h.srv.Remove(pk)

	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}

	ctx.JSON(tool.Success())
}

func (h *dictHandler) Disable(ctx iris.Context) {

	id := ctx.Params().Get("id")

	pk, err := strconv.Atoi(id)

	if err != nil {

		ctx.JSON(tool.Fail(err.Error()))
		return

	}

	var dict = model.Dict{
		ID:     pk,
		Status: 0,
	}

	err = h.srv.Update(&dict)

	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}

	ctx.JSON(tool.Success())
}

func (h *dictHandler) Enable(ctx iris.Context) {

	id := ctx.Params().Get("id")

	pk, err := strconv.Atoi(id)

	if err != nil {

		ctx.JSON(tool.Fail(err.Error()))
		return

	}

	var dict = model.Dict{
		ID:     pk,
		Status: 1,
	}

	err = h.srv.Update(&dict)

	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}

	ctx.JSON(tool.Success())
}

func (h *dictHandler) GetDict(ctx iris.Context) {

	id := ctx.Params().Get("id")

	pk, err := strconv.Atoi(id)

	if err != nil {

		ctx.JSON(tool.Fail(err.Error()))
		return

	}

	redisSetting, err := h.srv.Find(pk)
	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return

	}
	ctx.JSON(tool.Data(redisSetting))

}

func (h *dictHandler) Page(ctx iris.Context) {

	var dict struct {
		model.Dict
		model.Pager
	}

	err := ctx.ReadJSON(&dict)

	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}

	list := h.srv.Page(&dict.Dict, dict.Pager)
	ctx.JSON(tool.Data(list))
}

func (h *dictHandler) Import(ctx iris.Context) {

	var dicts []model.Dict

	err := ctx.ReadJSON(&dicts)

	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}
	for i := range dicts {
		err = h.srv.Save(&dicts[i])
	}

	if err != nil {
		ctx.JSON(tool.Fail(err.Error()))
		return
	}

	ctx.JSON(tool.Success())
}
